import json
import requests


class MY_MaaS_2025_HTTP_CAN_USE:
    API_URL = "http://maas-api.cn-huabei-1.xf-yun.com/v1/chat/completions"
    API_KEY = "sk-AvPi70UV1yVyVnkF8967D01f9b3f40E0A48bBe94AbCcA3Cc"

    def invoke(self, prompt_info):
        try:
            print(prompt_info)
            invoke_request = self.invoke_request(prompt_info)
            response = json.loads(invoke_request)
            content = response["choices"][0]["message"]["content"]
            usage = response["usage"]
            # return choices["message"]["content"]
            return (
                content,
                usage["prompt_tokens"],
                usage["completion_tokens"],
                usage["total_tokens"],
                response["id"],
            )

        except Exception as e:
            print(e)
            return ""

    def invoke_request(self, prompt_info):
        headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {self.API_KEY}",
            # 微调模型1
            # "lora_id": "1935525110816976896",
            # 微调模型2
            "lora_id": "1945679103809183744",
        }

        data = self._build_request_body(prompt_info)

        response = requests.post(
            self.API_URL,
            headers=headers,
            json=data,
            timeout=(500, 1800),  # connect timeout, read timeout in seconds
        )

        if not response.ok:
            raise Exception(f"Unexpected code {response.status_code}")

        return response.text

    def _build_request_body(self, prompt_info, model=""):
        prompts = []

        message = {"role": "user", "content": prompt_info}
        prompts.append(message)

        request = {
            "model": "xdeepseekr1qwen32b",
            "stream": False,
            "temperature": 0.5,
            "top_k": 4,
            "max_tokens": 8192,
            "messages": prompts,
        }

        return request


# if __name__ == "__main__":
#     maas = MY_MaaS_2025_HTTP_CAN_USE()
#     print(
#         maas.invoke(
#             """你的角色是：客服、客户对话核心问题提炼专家。
# 你的任务是：根据客服、客户对话，提炼出沟通的核心问题，并反馈问题描述。
# 根据以上要求，我的输入是：

# 客户：[图片1]¤[暂不支持展示该消息格式]
# 客户：是订错了 还是小柜没放舱 ？
# 客服：订错了
# 客户：跟航管说了吗
# 客户：那我直接去航管 然后直接找一代改哦
# 客服：好
# 客户：[图片2]¤[暂不支持展示该消息格式]
# 客户：这...
# 客户：现在怎么办
# 客户：船期订错的话 没得救
# 客服：我订的不是2j4开的么
# 客户：这个船明天开港，后天截单
# 客户：那你问航管
# 客户：墨西哥要早截
# 客户：我看系统是 3.13 2/4的
# 客户：墨西哥要早截的
# 客户：[图片3]¤[暂不支持展示该消息格式]
# 客服：提前开了。。擦
# 客户：ETD 提前一天
# 客户：3.12了
# 客户：[图片]¤[暂不支持展示该消息格式]
# 客户：看下怎么弄哦
# 客服：退了吧，这个来不及
# 客户：1"""
#         )
#     )
    
    
if __name__ == "__main__":
    maas = MY_MaaS_2025_HTTP_CAN_USE()
    print(
        maas.invoke(
            """你的角色是：国际物流行业客服、客户对话核心问题提炼专家。
你的任务是：根据客服、客户对话，提炼出沟通的核心问题，反馈问题描述，并指出问题会造成什么后果。
根据以上要求，我的输入是：
客服：我要给你吐槽一下
客服：那个傻逼客户，她说我们没说清楚用什么单去报关
客服：所以是我们的问题
客服：像傻逼一样
客服：[图片]¤[暂不支持展示该消息格式]
客服：[图片]¤[暂不支持展示该消息格式]
客服：真的傻逼常常有，今年特别多
客服：[图片]
客户：神金
客户：我服了
客户：没出过货吗
客服：就是赖了
客服：就当你真的用hbl报关
客服：正常报关流程是有舱单才能报关
客服：你用hbl报关了，没舱单不来问问
客服：就是忘记了报关，现在来赖皮
客户：红色头像的是朱文静吗 还是欧阳思辰
客服：朱文静
客服：应该吧
客服：是她截图给我
客户：怎么没见他们用HBL号提柜？
客户：真的会赖皮
客服：哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
客服：确实哦
客户：你知道吗 我早上看到这个事情的时候 我就很害怕他们把责任推到我们身上 说什么我们怎么不帮忙查 没报关放行怎么不去提醒之类
客户：我靠 我是没想到他们能用HBL报关
客服：哈哈哈哈没想到用这赖"""
        )
    )
